import { reqShopCartList, reqDeleteCartById, reqUpdataCheckedById } from "@/api"
const state = {
    cartList: []
}
const mutations = {
    GETCARTLIST(state, cartList) {
        state.cartList = cartList;
    }
}
const actions = {
    // 获取购物车列表信息
    async getCartList({ commit }) {
        let result = await reqShopCartList();
        if (result.code == 200) {
            commit('GETCARTLIST', result.data)
        }
    },
    // 删除购物车某个产品
    async deleteCartBySkuId({ commit }, skuId) {
        let result = await reqDeleteCartById(skuId)
        //不需要返回数据 
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('fail'))
        }
    },

    //切换商品的选中状态
    async updataCheckedById({ commit }, { skuId, isChecked }) {
        let result = await reqUpdataCheckedById(skuId, isChecked)
        if (result.code == 200) {
            return 'ok'
        } else {
            return Promise.reject(new Error('fail'))
        }
    },

    //删除所有的选中的产品
    deleteAllCheckedCart({ dispatch, getters }) {
        //定义一个数组存放promise对象
        let promiseAll = []
        // 获取购物车全部产品是一个数组
        getters.cartList.cartInfoList.forEach(item => {
            // 如果是选中状态就删除，不是就不操作，是的话，返回的结果是一个Promise对象因为调用deleteCartBySkuId函数
            let promise = item.isChecked == 1 ? dispatch('deleteCartBySkuId', item.skuId) : '';
            // 每一次返回的结果promise追加到数组里面
            promiseAll.push(promise);
        });
        //Promise.all() 数组里面的promise对象都是成功才是成功，有一个失败则为失败
        return Promise.all(promiseAll)

    },
    //修改全部产品的状态
    updataAllCartIsChecked({ dispatch, state }, isChecked) {
        let promiseAll = [];
        //让每一个产品选中状态和全选相同
        state.cartList[0].cartInfoList.forEach(item => {
            let promise = dispatch('updataCheckedById', { skuId: item.skuId, isChecked })
            promiseAll.push(promise)
        })
        return Promise.all(promiseAll)
    }


}
const getters = {
    cartList(state) {
        return state.cartList[0] || {}
    }
}
export default {
    state,
    mutations,
    actions,
    getters
}